﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using Data;

namespace Business.Classes
{
    public class AnimalBO
    {
        BDCampus2Entities db = new BDCampus2Entities();

        /// <summary>
        ///Insere ou Edita Animal 
        /// </summary>
        /// <param name="objAniBO">AnimalVO</param>
        /// <returns>Int IdAnimal</returns>
        public int InserirOuEditar(AnimalVO objAniBO)
        {
            Animal n = (from o in db.Animals
                        where o.ID_ANIMAL.Equals(objAniBO.IdAnimal)
                        select o).FirstOrDefault();


            if (n != null)
            {
                n.IDENTIFICACAO = objAniBO.Identificacao;
                n.ID_ESPECIE = objAniBO.IdEspecie;
                n.ID_RACA = objAniBO.IdRaca;
                n.IDADE = objAniBO.Idade;
                n.ID_FINALIDADE = objAniBO.IdFinalidade;
                n.DSC_ANIMAL = objAniBO.Descricao;
                n.ID_USUARIO = objAniBO.IdUsuario;
                n.FLG_ATIVO = objAniBO.Ativo;
                n.DAT_ALTERACAO = DateTime.Now;
                db.Animals.ApplyCurrentValues(n);
                db.SaveChanges();
            }
            else
            {
                n = new Animal();
                n.IDENTIFICACAO = objAniBO.Identificacao;
                n.ID_ESPECIE = objAniBO.IdEspecie;
                n.ID_RACA = objAniBO.IdRaca;
                n.IDADE = objAniBO.Idade;
                n.ID_FINALIDADE = objAniBO.IdFinalidade;
                n.DSC_ANIMAL = objAniBO.Descricao;
                n.ID_USUARIO = objAniBO.IdUsuario;
                n.FLG_ATIVO = true;
                n.DAT_CADASTRO = DateTime.Now;
                db.AddToAnimals(n);
                db.SaveChanges();
            }

            return n.ID_ANIMAL;
        }


        /// <summary>
        /// Seleciona Aninal
        /// </summary>
        /// <param name="idAnimal">int IdAnimal</param>
        /// <returns>AnimalVO</returns>
        public AnimalVO SelectAnimal(int idAnimal)
        {
            Animal n = (from o in db.Animals
                        where o.ID_ANIMAL.Equals(idAnimal)
                        select o).FirstOrDefault();

            AnimalVO objAniVO = new AnimalVO();

            if (n != null)
            {
                objAniVO.IdAnimal = n.ID_ANIMAL;
                objAniVO.IdEspecie = n.ID_ESPECIE;
                objAniVO.IdRaca = n.ID_RACA;
                objAniVO.Idade = n.IDADE;
                objAniVO.IdFinalidade = n.ID_FINALIDADE;
                objAniVO.Descricao = n.DSC_ANIMAL;
                objAniVO.IdUsuario = n.ID_USUARIO;
                objAniVO.Ativo = n.FLG_ATIVO;
            }
            return objAniVO;
        }
        /// <summary>
        /// Inativar Animal
        /// </summary>
        /// <param name="IdAnimal">int IdAnimal</param>
        public void InativarAnimal(int IdAnimal)
        {
            Animal n = (from o in db.Animals
                        where o.ID_ANIMAL.Equals(IdAnimal)
                        select o).FirstOrDefault();

            if (n != null)
            {
                n.FLG_ATIVO = false;
                db.Animals.ApplyCurrentValues(n);
                db.SaveChanges();
            }
        }
        /// <summary>
        /// Seleciona uma Lista de Animais
        /// </summary>
        /// <param name="DscConsultaAnimal">String DscConsultaAnimal</param>
        /// <returns>List AnimalVO</returns>
        public List<AnimalVO> SelectAnimal(string DscConsultaAnimal)
        {
            List<AnimalVO> ListAniVO = new List<AnimalVO>();

            List<Animal> listC = (from o in db.Animals
                                  where o.Lista_Especies.DSC_ESPECIE.Trim().Contains(DscConsultaAnimal.Trim())
                                  || o.Lista_Racas.DSC_RACA.Trim().Contains(DscConsultaAnimal.Trim())
                                  || o.DSC_ANIMAL.Trim().Contains(DscConsultaAnimal.Trim())
                                  || o.IDENTIFICACAO.Trim().Contains(DscConsultaAnimal.Trim())
                                  || o.Lista_FinalidadeAnimal.DSC_FINALIDADE.Trim().Contains(DscConsultaAnimal.Trim())
                                  select o).OrderByDescending(c => c.DAT_CADASTRO).ToList();

            foreach (Animal item in listC)
            {
                AnimalVO objAniVO = new AnimalVO();
                objAniVO.IdAnimal = item.ID_ANIMAL;
                objAniVO.IdEspecie = item.ID_ESPECIE;
                objAniVO.IdRaca = item.ID_RACA;
                objAniVO.Idade = item.IDADE;
                objAniVO.IdFinalidade = item.ID_FINALIDADE;
                objAniVO.Descricao = item.DSC_ANIMAL;
                objAniVO.IdUsuario = item.ID_USUARIO;
                objAniVO.Ativo = item.FLG_ATIVO;
                ListAniVO.Add(objAniVO);
            }
            return ListAniVO;
        }
    }
}
